package main

import "fmt"

// Worker go语言中贴近类概念的就是结构体，包含多个字段
type Worker struct {
	Name     string
	Age      int
	Position string
}

// 为结构体绑定方法，指定Worker的对象为接收者
// 此种是为值类型的绑定方法
func (worker Worker) do() {
	fmt.Println(worker.Name, "正在努力工作")
	//为值类型绑定方法，在方法内部针对值类型接收者的修改，在函数外部不会生效
	worker.Name = "李四"
}

// 将接收者改为指针类型，则修改会影响原对象的字段数值
// 通常都会使用指针类型的接收者函数，方便修改原有对象的数值[为指针类型绑定函数]
func (worker *Worker) doPointer() {
	fmt.Println(worker.Name, "正在努力工作")
	//在函数外部会生效
	worker.Name = "李四"
}

func main() {
	worker := Worker{
		Name: "张三",
		Age:  20,
	}
	//worker.do()
	//接收者即使定义为指针类型，值类型的对象也可以直接调用，不受影响
	worker.doPointer()
	//此处还是输出张三
	fmt.Println(worker.Name)
}
